//
//  LYHttp.h
//  LYNetworkService
//
//  Created by 九爷 on 2021/12/23.
//

#import <UIKit/UIKit.h>

typedef NS_ENUM(NSUInteger, LYHttpRequestType) {
    ///普通HTTP请求
    LYHttpRequestTypeNormal,
    ///JSON请求
    LYHttpRequestTypeJson,
    ///文件、图片上传
    LYHttpRequestTypeUpload,
};

typedef NS_ENUM(NSUInteger, LYHttpResponseType) {
    ///普通HTTP响应
    LYHttpResponseTypeNormal,
    ///JSON响应
    LYHttpResponseTypeJson,
};

typedef NS_ENUM(NSUInteger, LYHttpMethodType) {
    ///post请求
    LYHttpMethodTypePost,
    ///get请求
    LYHttpMethodTypeGet,
    ///put请求
    LYHttpMethodTypePut,
    ///delete请求
    LYHttpMethodTypeDelete,
};

typedef NSDictionary *(^LYHttpRequestHeaderSet)(void);
typedef void(^LYHttpUploadProgressComplation)(CGFloat progress);
typedef void(^LYHttpComplation)(BOOL success, id respObj, NSInteger errorCode, NSTimeInterval timestamp, NSDictionary *header);

@interface LYHttp : NSObject

/**
 @brief 设置请求超时时间(默认10秒)

 @param timeout 超时时间
 */
- (void)setRequestTimeout:(CGFloat)timeout;

/**
 @brief 设置请求头

 @param headers 请求头键值对象
 */
- (void)setRequestHeaders:(NSDictionary<NSString *, NSString *> *)headers;

/**
 @brief 初始化网络请求，并设置是否允许使用代理请求
  如果不调用该方法，默认所有请求关闭代理

 @param disable 是否关闭代理
 */
- (void)initNetworkWithDidDisableProxy:(BOOL)disable;

/**
 @brief post发送json格式参数请求

 @param url 请求地址
 @param responseType 接收请求结果类型枚举 LYHttpResponseType
 @param headers 请求头参数设置回调
 @param parameters 请求参数
 @param isSync 异步 NO 同步 YES
 @param complation 请求结果回调
 */
- (void)postJsonWithUrl:(NSString *)url responseType:(LYHttpResponseType)responseType headers:(LYHttpRequestHeaderSet)headers parameters:(id)parameters isSync:(BOOL)isSync complation:(LYHttpComplation)complation;

/**
 @brief get发送json格式参数请求

 @param url 请求地址
 @param responseType 接收请求结果类型枚举 LYHttpResponseType
 @param headers 请求头参数设置回调
 @param parameters 请求参数
 @param isSync 异步 NO 同步 YES
 @param complation 请求结果回调
 */
- (void)getJsonWithUrl:(NSString *)url responseType:(LYHttpResponseType)responseType headers:(LYHttpRequestHeaderSet)headers parameters:(id)parameters isSync:(BOOL)isSync complation:(LYHttpComplation)complation;

/**
 @brief put发送json格式参数请求

 @param url 请求地址
 @param responseType 接收请求结果类型枚举 LYHttpResponseType
 @param headers 请求头参数设置回调
 @param parameters 请求参数
 @param isSync 异步 NO 同步 YES
 @param complation 请求结果回调
 */
- (void)putJsonWithUrl:(NSString *)url responseType:(LYHttpResponseType)responseType headers:(LYHttpRequestHeaderSet)headers parameters:(id)parameters isSync:(BOOL)isSync complation:(LYHttpComplation)complation;

/**
 @brief delete发送json格式参数请求

 @param url 请求地址
 @param responseType 接收请求结果类型枚举 LYHttpResponseType
 @param headers 请求头参数设置回调
 @param parameters 请求参数
 @param isSync 异步 NO 同步 YES
 @param complation 请求结果回调
 */
- (void)deleteJsonWithUrl:(NSString *)url responseType:(LYHttpResponseType)responseType headers:(LYHttpRequestHeaderSet)headers parameters:(id)parameters isSync:(BOOL)isSync complation:(LYHttpComplation)complation;

/**
 @brief 发送请求

 @param type 请求类型枚举 LYHttpRequestType
 @param responseType 接收请求结果类型枚举 LYHttpResponseType
 @param methodType 请求方式枚举 LYHttpMethodType
 @param headers 请求头参数设置回调
 @param url 请求地址
 @param parameters 请求参数
 @param complation 请求结果回调
 */
- (void)requestWithType:(LYHttpRequestType)type responseType:(LYHttpResponseType)responseType methodType:(LYHttpMethodType)methodType headers:(LYHttpRequestHeaderSet)headers url:(NSString *)url parameters:(id)parameters complation:(LYHttpComplation)complation;

/**
 @brief 发送同步请求

 @param type 请求类型枚举 LYHttpRequestType
 @param responseType 接收请求结果类型枚举 LYHttpResponseType
 @param methodType 请求方式枚举 LYHttpMethodType
 @param headers 请求头参数设置回调
 @param url 请求地址
 @param parameters 请求参数
 @param complation 请求结果回调
 */
- (void)requestSynchronousWithType:(LYHttpRequestType)type responseType:(LYHttpResponseType)responseType methodType:(LYHttpMethodType)methodType headers:(LYHttpRequestHeaderSet)headers url:(NSString *)url parameters:(id)parameters complation:(LYHttpComplation)complation;

/**
 @brief 图片批量上传

 @param url 请求地址
 @param images 待上传图片信息字典，图片名字和图片二进制字典
 @param uploadName 服务器接收图片名字
 @param headers 请求头参数设置回调
 @param responseType 接收请求结果类型枚举 LYHttpResponseType
 @param parameters 请求参数
 @param progressComplation 上传进度回调
 @param complation 请求结果回调
 */
- (void)uploadImageWithUrl:(NSString *)url images:(NSDictionary<NSString *, NSData *> *)images uploadName:(NSString *)uploadName headers:(LYHttpRequestHeaderSet)headers responseType:(LYHttpResponseType)responseType parameters:(id)parameters progress:(LYHttpUploadProgressComplation)progressComplation complation:(LYHttpComplation)complation;

@end
